package ${d.pkg};

<#list d.imports as imps>
import ${imps};
</#list>

/**
 *  ${d.ei.tableInfo.name}
 *
 *	@author ${d.ei.author.name}(${d.ei.author.english})
 *	@date ${d.createTime}
 */
@CKMapper
public interface ${d.className} {

	
	/**
	 * 	插入
	 */
	int insert(@Param("entity") ${d.ei.className} entity);
	/**
	 *	批量插入
	 */
	int multipleInsert(@Param("entities") List<${d.ei.className}> entities);
	
	
	/**
	 * 	查询
	 */
	List<${d.ei.className}> findByQuery(@Param("query") ${d.qi.className} query);
	/**
	 * 	查询
	 */
	@SuppressWarnings("rawtypes")
	List<${d.ei.className}> findByQueryPartField(@Param("fields") List<CKField> fields, @Param("query") ${d.qi.className} query);
	/**
	 *	查数量
	 */
	int countByQuery(@Param("query") ${d.qi.className} query);
	/**
	 * 	分页查询
	 */
	@Pagement(count="countByQuery")
	Pager<${d.ei.className}> findByPage(@Param("page") Pager<${d.qi.className}> page, @Param("query") ${d.qi.className} query);
	/**
	 * 	分页查
	 */
	@SuppressWarnings("rawtypes")
	@Pagement(count="countByQuery")
	Pager<${d.ei.className}> findByPagePartField(@Param("fields") List<CKField> fields, @Param("page") Pager<${d.ei.className}> page, @Param("query") ${d.qi.className} query);
	
	
	/**
	 * 	聚合
	 */
	@SuppressWarnings("rawtypes")
	List<${d.ei.className}> aggregateByQuery(
				@Param("fields") List<CKField> fields, 
				@Param("query") ${d.qi.className} query, 
				@Param("groupBy") GroupBy groupBy);
	
	
	/**
	 * 	修改
	 *	<p>	1.1.54388版以后才支持修改，而且修改并不是实时的
	 *	<p>	代价很重：ClickHouse会找到查询条件涉及的分区，然后重建该分区，重建的时把数据改掉（如果没有分区，那太刺激了）
	 *	<p>	所以虽然支持，但是慎用
	 */
	@Deprecated
	int update(@Param("query") ${d.qi.className} query, @Param("entity") ${d.ei.className} entity);
	/**
	 * 	删除
	 *	<p>	ClickHouse的执行步骤和update一样，也需要重建分区
	 *	<p>	所以虽然支持，但是慎用
	 */
	@Deprecated
	int delete(@Param("query") ${d.qi.className} query);
}
